package com.it.utils;

import com.it.common.ErrorCode;
import com.it.common.FrameResp;
import com.it.exception.SystemException;
import org.springframework.validation.BindException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @desc:
 * @author: panxiyi
 * @date: 2023/4/13 11:22 下午
 */

@RestControllerAdvice
public class ProjectExceptionAdvice {

    @ExceptionHandler
    public FrameResp doException(Exception ex) {
        // 记录日志
        // 通知运维、开发
        ex.printStackTrace();
        if (ex instanceof SystemException) {
            return FrameResp.FAILURE(ErrorCode.errorCodeValueOf(((SystemException) ex).getCode()), ((SystemException) ex).getMsg());
        }
        return FrameResp.FAILURE(ErrorCode.FAIL, "服务器暂时不可用，请稍后再试！");
    }

    @ExceptionHandler({MethodArgumentNotValidException.class, BindException.class})
    public FrameResp methodArgumentNotValidExceptionHandler(BindException e) {
        Logs.common.info(Pair.of("发生异常！{}", e.getMessage()));
        String message = e.getBindingResult().getAllErrors().get(0).getDefaultMessage();
        return FrameResp.FAILURE(ErrorCode.FAIL, "服务器暂时不可用，请稍后再试！");
    }
}
